Loading packages
package_check <- lapply(
packages,
function(x) {
if (!require(x, character.only = TRUE)) {
install.packages(x, dependencies = TRUE)
library(x, character.only = TRUE)
}
}
)
Loading required package: tidyverse
Warning: package ‘ggplot2’ was built under R version 4.2.3Warning: package ‘tidyr’ was built under R version 4.2.3Warning: package ‘dplyr’ was built under R version 4.2.3Warning: package ‘stringr’ was built under R version 4.2.3── Attaching core tidyverse packages ──────────────────────────────────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.0 ✔ tibble 3.2.1
✔ lubridate 1.9.2 ✔ tidyr 1.3.1
✔ purrr 1.0.2 ── Conflicts ────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
Load Data
bikes_df <- read_csv(file.path("data", "london-bikes-custom.csv"),
col_types = "Dcfffilllddddc"
)
1- Data
initiate an empty canvas

2- Aesthetics
Maps data (variables) to the graph properties such as;
- positions(x,y)
- colours(colours, fill)
- shapes(shape, linetype)
- size(size)
- transparent(alpha)
- groupings(group)

3- Geometries
Interpret data (aesthetics) as graphs.
- points
- lines
- polygons
- text labels
- …

we may add visual properties to the graph

Mapping vs visual properties
Mapping

Visual properties

Mapping expresions

Global vs Local

DIV
1st column when browser is wide
ggplot(
bikes_df,
aes(x = temp_feel, y = count,
color = season)
) +
geom_point(
alpha = .5
)
… 2nd column when browser is wide
ggplot(
bikes_df,
aes(x = temp_feel, y = count)
) +
geom_point(
aes(color = temp_feel > 20),
alpha = .5
)
END


LS0tCnRpdGxlOiAiQ29uY2VwdHMgb2YgZ2dwbG90MiIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyBMb2FkaW5nIHBhY2thZ2VzCgpgYGB7cn0KcGFja2FnZXMgPC0gYygKICAgICJ0aWR5dmVyc2UiLAogICAgImdncGxvdDIiCikKCnBhY2thZ2VfY2hlY2sgPC0gbGFwcGx5KAogIHBhY2thZ2VzLAogIGZ1bmN0aW9uKHgpIHsKICAgIGlmICghcmVxdWlyZSh4LCBjaGFyYWN0ZXIub25seSA9IFRSVUUpKSB7CiAgICAgIGluc3RhbGwucGFja2FnZXMoeCwgZGVwZW5kZW5jaWVzID0gVFJVRSkKICAgICAgbGlicmFyeSh4LCBjaGFyYWN0ZXIub25seSA9IFRSVUUpCiAgICB9CiAgfQopCmBgYAoKIyBUaGUgZ3JhbW1lciBvZiBnZ3Bsb3QyCmBgYHtyfQp0aWJibGUoCkNvbXBvbmVudCA9IGMoIjEtRGF0YSIsIjItQWVzdGhldGljcyIsICIzLUdlb21ldHJpZXMiLCAiNC1TdGF0aXN0aWNzIiwgCiAgICAgICAgICAgICAgIjUtU2NhbGVzIiwgIjYtQ29vcmRpbmF0ZSBTeXN0ZW0iLCAiNy1GYWNldHMiLCAiOC1UaGVhbWVzIiksIApGdW5jdGlvbiA9ICBjKCJnZ3Bsb3QoZGF0YSkiLCAiYWVzKCkiLCAiZ2Vtb18qKCkiLCAic3RhdF8qKCkiLCAic2NhbGVfKigpIiwgCiAgICAgICAgICAgICAgImNvb3JkXyooKSIsICJmYWNldF8qKCkiLCAidGhlYW1lXyooKSIpLApEZXNjcmlwdGlvbiA9IGMoIlRoZSByYXcgZGF0YSB5b3Ugd2FudCB0byB2aXN1YWxpemUiLAogICAgICAgICAgICAgICAgIkFlc3RoZXRpYyBtYXBwaW5ncyBiZXR3ZWVuIHZhcmlhYmxlcyBhbmQgdmlzdWFsIHByb3BlcnRpZXMiLCAKICAgICAgICAgICAgICAgICJUaGUgZ2VvbWV0cmljIHNoYXBlcyByZXByZXNlbnRpbmcgdGhlIGRhdGEiLAogICAgICAgICAgICAgICAgIlRoZSBzdGF0aXN0aWNzIHRyYW5zZm9ybWF0aW9uIGFwcGxpZWQgdG8gdGhlIGRhdGEiLAogICAgICAgICAgICAgICAgIk1hcHMgYmV0d2VlbiB0aGUgZGF0YSBhbmQgdGhlIGFzZXN0aGV0aWMgZGltbWVudGlvbnMiLAogICAgICAgICAgICAgICAgIk1hcHMgZGF0YSBpbnRvIHRoZSBwbGFuZSBvZiB0aGUgZGF0YSByZWN0ZW5nbGUiLAogICAgICAgICAgICAgICAgIlRoZSBhcnJhbmdlbWVudCBvZiB0aGUgZGF0YSBpbnRvIGEgZ3JpZCBvZiBwbG90cyIsCiAgICAgICAgICAgICAgICAiVGhlIG92ZXJhbGwgdmlzaXVhbCBvZiB0aGUgZ2FyYXBoIgogICAgICAgICAgICAgICAgKQopCmBgYAojIExvYWQgRGF0YQoKCmBgYHtyfQpiaWtlc19kZiA8LSByZWFkX2NzdihmaWxlLnBhdGgoImRhdGEiLCAibG9uZG9uLWJpa2VzLWN1c3RvbS5jc3YiKSwKICBjb2xfdHlwZXMgPSAiRGNmZmZpbGxsZGRkZGMiCikKYGBgCiMjIDEtIERhdGEgCmluaXRpYXRlIGFuIGVtcHR5IGNhbnZhcwpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLndpZHRoPTQsIGZpZy5oZWlnaHQ9M30KZ2dwbG90KGRhdGEgPSBiaWtlc19kZikKYGBgCiMjIDItIEFlc3RoZXRpY3MKTWFwcyBkYXRhICh2YXJpYWJsZXMpIHRvIHRoZSBncmFwaCBwcm9wZXJ0aWVzIHN1Y2ggYXM7CgoqIHBvc2l0aW9ucyh4LHkpCiogY29sb3Vycyhjb2xvdXJzLCBmaWxsKQoqIHNoYXBlcyhzaGFwZSwgbGluZXR5cGUpCiogc2l6ZShzaXplKQoqIHRyYW5zcGFyZW50KGFscGhhKQoqIGdyb3VwaW5ncyhncm91cCkKCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcud2lkdGg9NCwgZmlnLmhlaWdodD0zfQpiaWtlc19kZiAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0ZW1wX2ZlZWwsIHkgPSBjb3VudCkpCmBgYAojIyAzLSBHZW9tZXRyaWVzCkludGVycHJldCBkYXRhIChhZXN0aGV0aWNzKSBhcyBncmFwaHMuCgoqIHBvaW50cwoqIGxpbmVzCiogcG9seWdvbnMKKiB0ZXh0IGxhYmVscwoqIC4uLgoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy53aWR0aD00LCBmaWcuaGVpZ2h0PTN9CmJpa2VzX2RmICU+JQogIGdncGxvdChhZXMoeCA9IHRlbXBfZmVlbCwgeSA9IGNvdW50KSkgKwogIGdlb21fcG9pbnQoKQpgYGAKd2UgbWF5IGFkZCB2aXN1YWwgcHJvcGVydGllcyB0byB0aGUgZ3JhcGgKYGBge3IsIGVjaG89RkFMU0UsIGZpZy53aWR0aD00LCBmaWcuaGVpZ2h0PTN9CmJpa2VzX2RmICU+JQogIGdncGxvdChhZXMoeCA9IHRlbXBfZmVlbCwgeSA9IGNvdW50KSkgKwogIGdlb21fcG9pbnQoCiAgICBjb2xvciA9ICIjMkYwMDVGIiwKICAgIGFscGhhID0gLjUsCiAgICBzaGFwZSA9ICJYIiwKICAgIHN0cm9rZSA9IDEsCiAgICBzaXplID0gMgogICkKYGBgCiMjIyBNYXBwaW5nIHZzIHZpc3VhbCBwcm9wZXJ0aWVzCgpNYXBwaW5nIAoKYGBge3IsIGVjaG89RkFMU0UsIGZpZy53aWR0aD00LCBmaWcuaGVpZ2h0PTN9CmdncGxvdCgKICAgIGJpa2VzX2RmLAogICAgYWVzKHggPSB0ZW1wX2ZlZWwsIHkgPSBjb3VudCkKICApICsKICBnZW9tX3BvaW50KAogICAgY29sb3IgPSAiIzI4YTg3ZCIsCiAgICBhbHBoYSA9IC41CiAgKQpgYGAKIFZpc3VhbCBwcm9wZXJ0aWVzCiAKYGBge3IsIGVjaG89RkFMU0UsIGZpZy53aWR0aD00LCBmaWcuaGVpZ2h0PTN9CmdncGxvdCgKICAgIGJpa2VzX2RmLAogICAgYWVzKHggPSB0ZW1wX2ZlZWwsIHkgPSBjb3VudCkKICApICsKICBnZW9tX3BvaW50KAogICAgYWVzKGNvbG9yID0gc2Vhc29uKSwKICAgIGFscGhhID0gLjUKICApCgpgYGAKIyMjIE1hcHBpbmcgZXhwcmVzaW9ucwoKYGBge3J9CmdncGxvdCgKICAgIGJpa2VzX2RmLAogICAgYWVzKHggPSB0ZW1wX2ZlZWwsIHkgPSBjb3VudCkKICApICsKICBnZW9tX3BvaW50KAogICAgYWVzKGNvbG9yID0gdGVtcF9mZWVsID4gMjApLAogICAgYWxwaGEgPSAuNQogICkKYGBgCiMjIyBHbG9iYWwgdnMgTG9jYWwKCmBgYHtyfQpnZ3Bsb3QoCiAgICBiaWtlc19kZiwKICAgIGFlcyh4ID0gdGVtcF9mZWVsLCB5ID0gY291bnQsCiAgICAgICAgY29sb3IgPSBzZWFzb24pCiAgKSArCiAgZ2VvbV9wb2ludCgKICAgIGFscGhhID0gLjUKICApCmBgYAojIyMgRElWCjxkaXYgY2xhc3M9J2ZsdWlkLXJvdyc+CiAgPGRpdiBjbGFzcz0nY29sLW1kLTYnPgoKMXN0IGNvbHVtbiB3aGVuIGJyb3dzZXIgaXMgd2lkZQoKYGBge3J9CmdncGxvdCgKICAgIGJpa2VzX2RmLAogICAgYWVzKHggPSB0ZW1wX2ZlZWwsIHkgPSBjb3VudCwKICAgICAgICBjb2xvciA9IHNlYXNvbikKICApICsKICBnZW9tX3BvaW50KAogICAgYWxwaGEgPSAuNQogICkKYGBgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0nY29sLW1kLTYnPgoKLi4uIDJuZCBjb2x1bW4gd2hlbiBicm93c2VyIGlzIHdpZGUKCmBgYHtyfQpnZ3Bsb3QoCiAgICBiaWtlc19kZiwKICAgIGFlcyh4ID0gdGVtcF9mZWVsLCB5ID0gY291bnQpCiAgKSArCiAgZ2VvbV9wb2ludCgKICAgIGFlcyhjb2xvciA9IHRlbXBfZmVlbCA+IDIwKSwKICAgIGFscGhhID0gLjUKICApCmBgYAogIDwvZGl2PgoKPC9kaXY+CiMgRElWIGZvcm1hdAo8ZGl2IGNsYXNzPSdmbHVpZC1yb3cnPgo8ZGl2IGNsYXNzPSdjb2wtbWQtNic+CiAgMXN0IGNvbHVtbiBjb2RlCmBgYHtyfQpnZ3Bsb3QoCiAgICBiaWtlc19kZiwKICAgIGFlcyh4ID0gdGVtcF9mZWVsLCB5ID0gY291bnQsCiAgICAgICAgY29sb3IgPSBzZWFzb24pCiAgKSArCiAgZ2VvbV9wb2ludCgKICAgIGFscGhhID0gLjUKICApCmBgYAogIAo8L2Rpdj4KPGRpdiBjbGFzcz0nY29sLW1kLTYnPgogIDJzdCBjb2x1bW4gY29kZQpgYGB7cn0KZ2dwbG90KAogICAgYmlrZXNfZGYsCiAgICBhZXMoeCA9IHRlbXBfZmVlbCwgeSA9IGNvdW50LAogICAgICAgIGNvbG9yID0gc2Vhc29uKQogICkgKwogIGdlb21fcG9pbnQoCiAgICBhbHBoYSA9IC41CiAgKQpgYGAKICAKPC9kaXY+CjwvZGl2PgoKPGRpdiBjbGFzcz0nZmx1aWQtcm93Jz4KPGRpdiBjbGFzcz0nY29sLW1kLTYnPgogIDFzdCBjb2x1bW4gcGxvdApgYGB7ciBlY2hvPUZBTFNFfQpnZ3Bsb3QoCiAgICBiaWtlc19kZiwKICAgIGFlcyh4ID0gdGVtcF9mZWVsLCB5ID0gY291bnQsCiAgICAgICAgY29sb3IgPSBzZWFzb24pCiAgKSArCiAgZ2VvbV9wb2ludCgKICAgIGFscGhhID0gLjUKICApCmBgYAoKPC9kaXY+CjxkaXYgY2xhc3M9J2NvbC1tZC02Jz4KICAyc3QgY29sdW1uIHBsb3QKYGBge3IgZWNobz1GQUxTRX0KZ2dwbG90KAogICAgYmlrZXNfZGYsCiAgICBhZXMoeCA9IHRlbXBfZmVlbCwgeSA9IGNvdW50LAogICAgICAgIGNvbG9yID0gc2Vhc29uKQogICkgKwogIGdlb21fcG9pbnQoCiAgICBhbHBoYSA9IC41CiAgKQpgYGAKICAKPC9kaXY+CjwvZGl2PgojIEVORAoKYGBge3IgZWNobz1GQUxTRX0KZ2dwbG90KAogICAgYmlrZXNfZGYsCiAgICBhZXMoeCA9IHRlbXBfZmVlbCwgeSA9IGNvdW50LAogICAgICAgIGNvbG9yID0gc2Vhc29uKQogICkgKwogIGdlb21fcG9pbnQoCiAgICBhbHBoYSA9IC41CiAgKQpgYGAKCmBgYHtyIGVjaG89RkFMU0V9CmdncGxvdCgKICAgIGJpa2VzX2RmLAogICAgYWVzKHggPSB0ZW1wX2ZlZWwsIHkgPSBjb3VudCkKICApICsKICBnZW9tX3BvaW50KAogICAgYWxwaGEgPSAuNQogICkKYGBgCgo=